ফোরট্রানে OpenMP ব্যবহার করে Parallel Programming
OpenMP (Open Multi-Processing) একটি API (Application Programming Interface) যা মাল্টি-কোর প্রসেসরের ব্যবহার করে প্রোগ্রামিং কোডকে প্যারালাল (Parallel) কার্যকর করার জন্য ব্যবহৃত হয়। এটি বিশেষভাবে C, C++, এবং Fortran প্রোগ্রামিং ভাষায় ব্যবহৃত হয়। OpenMP ব্যবহার করে সহজেই মাল্টি-থ্রেডিং সমর্থিত প্রোগ্রাম তৈরি করা যায় এবং এটি অনেক ক্ষেত্রেই কোডের কার্যকারিতা উন্নত করতে সাহায্য করে, বিশেষ করে যখন গণনা-ভিত্তিক কাজ করা হয়।
OpenMP এর মূল কনসেপ্ট:
- Directives (ডিরেকটিভস): OpenMP প্যারালাল প্রোগ্রামিং করার জন্য ডিরেকটিভস ব্যবহার করা হয়, যা কম্পাইলারকে নির্দেশ দেয় কোন অংশে প্যারালাল কার্যক্রম করতে হবে।
- Threading: OpenMP সিপিইউ এর একাধিক থ্রেড ব্যবহার করে কাজ সম্পন্ন করতে পারে।
- Data Sharing: OpenMP ডেটা শেয়ারিং পদ্ধতি যেমন
private,sharedইত্যাদি ব্যবহারের মাধ্যমে থ্রেডগুলির মধ্যে ডেটার অ্যাক্সেস নিয়ন্ত্রণ করতে সহায়তা করে।
১. OpenMP ডিরেকটিভস
OpenMP তে প্রধানত তিনটি ধরনের ডিরেকটিভ ব্যবহৃত হয়:
!$OMP PARALLEL: প্যারালাল থ্রেড শুরু করতে ব্যবহৃত হয়।!$OMP DO: একটি লুপকে প্যারালাল করা।!$OMP END PARALLEL: প্যারালাল থ্রেডের শেষে নির্দেশ দেওয়া হয়।
২. একটি সাধারণ OpenMP প্রোগ্রাম উদাহরণ
ফোরট্রানে OpenMP ব্যবহার করে একটি প্যারালাল প্রোগ্রাম তৈরি করতে, প্রথমে আপনার কোডের মধ্যে !$OMP ডিরেকটিভস ব্যবহার করতে হবে। এখানে একটি সাধারণ উদাহরণ দেওয়া হলো যেখানে একটি সিম্পল লুপকে প্যারালাল করা হয়েছে।
উদাহরণ: প্যারালাল লুপ
PROGRAM openmp_example
INTEGER :: i, n
REAL :: sum, arr(1000)
! OpenMP ব্যবহারের জন্য
!$OMP PARALLEL DO REDUCTION(+:sum)
sum = 0.0
n = 1000
! অ্যারে ইনিশিয়ালাইজেশন
DO i = 1, n
arr(i) = i * 1.0
END DO
! প্যারালাল লুপ - অ্যারের উপাদান যোগফল বের করা
!$OMP DO
DO i = 1, n
sum = sum + arr(i)
END DO
!$OMP END DO
!$OMP END PARALLEL
PRINT *, 'Sum of array elements: ', sum
END PROGRAM openmp_exampleএখানে:
!$OMP PARALLEL DO REDUCTION(+:sum)ডিরেকটিভ দিয়ে লুপের প্রতিটি থ্রেডsumভেরিয়েবলটি বাড়াবে এবং পরে ফলাফল একত্রিত হবে।REDUCTIONঅপারেটরটি ব্যবহৃত হয়েছে যাতে প্রতিটি থ্রেডের জন্যsumভেরিয়েবল আলাদা থাকে এবং শেষে একটি একক মানে যোগফল জমা হয়।
৩. OpenMP ব্যবহার করে প্যারালাল ফাংশন
এখানে একটি উদাহরণ দেওয়া হলো যেখানে একটি ফাংশনকে প্যারালাল করা হচ্ছে:
PROGRAM openmp_parallel_function
INTEGER :: i, n
REAL :: result
n = 1000
! OpenMP প্যারালাল ফাংশন কল
!$OMP PARALLEL DO REDUCTION(+:result)
result = 0.0
DO i = 1, n
result = result + sqrt(i)
END DO
!$OMP END PARALLEL
PRINT *, 'Parallel result: ', result
END PROGRAM openmp_parallel_functionএখানে:
!$OMP PARALLEL DOডিরেকটিভ দিয়ে প্যারালাল লুপ শুরু করা হয়েছে।REDUCTION(+:result)ব্যবহার করা হয়েছে যাতে প্রতিটি থ্রেডের জন্যresultভেরিয়েবল আলাদা থাকে এবং শেষে ফলাফল একত্রিত হয়।
৪. OpenMP এর সুবিধা
- সহজ এবং দ্রুত প্যারালালাইজেশন: OpenMP আপনাকে সহজেই প্যারালাল প্রোগ্রাম লেখার সুবিধা প্রদান করে, কারণ এটি কম্পাইলার দ্বারা পরিচালিত হয় এবং খুব কম কোডের মাধ্যমে প্যারালাল প্রোগ্রামিং করা যায়।
- এফিশিয়েন্ট লুপ প্যারালালাইজেশন: OpenMP সাধারণত লুপ প্যারালালাইজেশনের জন্য ব্যবহৃত হয়। এটি বড় ডেটাসেটগুলির জন্য উপকারী, যেখানে সিম্পল লুপগুলিকে মাল্টি-কোর প্রসেসরের মাধ্যমে দ্রুত এক্সিকিউট করা যায়।
- বেশি কর্মক্ষমতা: যখন কম্পিউটার একাধিক কোর বা প্রসেসর সমর্থন করে, তখন OpenMP কোডের কার্যক্ষমতা অনেক বাড়িয়ে দিতে পারে।
৫. OpenMP কম্পাইল এবং রান করা
OpenMP কোড কম্পাইল করতে ফোরট্রান কম্পাইলার ব্যবহার করতে হয় যা OpenMP সমর্থন করে। যেমন:
- GFortran: ফোরট্রানে OpenMP কোড কম্পাইল করার জন্য
-fopenmpফ্ল্যাগ ব্যবহার করা হয়।
কম্পাইল:
gfortran -fopenmp openmp_example.f90 -o openmp_exampleRun:
./openmp_example
উপসংহার
OpenMP ফোরট্রানে মাল্টি-কোর বা মাল্টি-থ্রেডিং ব্যবহার করে প্যারালাল প্রোগ্রাম তৈরি করতে একটি শক্তিশালী টুল। এটি কোডের কার্যকারিতা বাড়াতে সাহায্য করে, বিশেষ করে গণনা-ভিত্তিক কাজের জন্য। আপনি যখন বড় ডেটাসেট নিয়ে কাজ করছেন বা বড় সংখ্যক গণনা করতে চান, তখন OpenMP এর মাধ্যমে সহজে আপনার কোডকে প্যারালাল করা সম্ভব।
Read more